import java.util.ArrayList;
import java.util.List;

public class Application {

    public static void main(String[] args){
        Application application = new Application();
        RandomCollection<Integer> 取数池 = application.取数池(application.配置区间和权重());
        for (int i = 0; i < 1; i++) {
            System.out.println(偏移处理(取数池.next()));
        }
    }

    static Integer 偏移处理(Integer integer) {
        Integer adjusted = integer - 20;
        if (adjusted < 0) {
            adjusted = 400 + adjusted;
        }
        return adjusted;
    }


    List<Interval> 配置区间和权重() {
        List<Interval> list = new ArrayList<>();

        // 每个区间创建一次

        // 区间 [0,100] 权重 13%
        Interval 区间0_100 = new Interval();
        区间0_100.set起始数字(0);
        区间0_100.set结束数字(100);
        区间0_100.set左闭区间(true);
        区间0_100.set右闭区间(true);
        区间0_100.set出现概率(13);
        list.add(区间0_100);

        // 区间 (100,200] 权重 13%
        Interval 区间100_200 = new Interval();
        区间100_200.set起始数字(100);
        区间100_200.set结束数字(200);
        区间100_200.set左闭区间(false);
        区间100_200.set右闭区间(true);
        区间100_200.set出现概率(13);
        list.add(区间100_200);

        // 区间 (200,300] 权重 26%
        Interval 区间200_300 = new Interval();
        区间200_300.set起始数字(200);
        区间200_300.set结束数字(300);
        区间200_300.set左闭区间(false);
        区间200_300.set右闭区间(true);
        区间200_300.set出现概率(26);
        list.add(区间200_300);

        // 区间 (300,400] 权重 48%
        Interval 区间300_400 = new Interval();
        区间300_400.set起始数字(300);
        区间300_400.set结束数字(400);
        区间300_400.set左闭区间(false);
        区间300_400.set右闭区间(true);
        区间300_400.set出现概率(48);
        list.add(区间300_400);

        return list;
    }


    RandomCollection<Integer> 取数池(List<Interval> 加权配置) {
        RandomCollection<Integer> 取数池 = new RandomCollection<>();
        for (Interval interval:加权配置) {
            // 左闭区间，右闭区间
            if (interval.左闭区间 && interval.右闭区间) {
                int 区间大小 = 0;
                for(int i = interval.起始数字 ; i <= interval.结束数字; i++) {
                    区间大小++;
                }
                double 单个元素出现概率 = interval.出现概率 / 区间大小;
                for(int i = interval.起始数字 ; i <= interval.结束数字; i++) {
                    取数池.add(单个元素出现概率,i);
                }
            }

            // 左闭区间，右开区间
            if (interval.左闭区间 && !interval.右闭区间) {
                int 区间大小 = 0;
                for(int i = interval.起始数字 ; i < interval.结束数字; i++) {
                    区间大小++;
                }
                double 单个元素出现概率 = interval.出现概率 / 区间大小;
                for(int i = interval.起始数字 ; i < interval.结束数字; i++) {
                    取数池.add(单个元素出现概率,i);
                }
            }

            // 左开区间，右闭区间
            if (!interval.左闭区间 && interval.右闭区间) {
                int 区间大小 = 0;
                for(int i = interval.起始数字 + 1 ; i <= interval.结束数字; i++) {
                    区间大小++;
                }
                double 单个元素出现概率 = interval.出现概率 / 区间大小;
                for(int i = interval.起始数字 + 1 ; i <= interval.结束数字; i++) {
                    取数池.add(单个元素出现概率,i);
                }
            }

            // 左开区间，右开区间
            if (!interval.左闭区间 && !interval.右闭区间) {
                int 区间大小 = 0;
                for(int i = interval.起始数字 + 1 ; i < interval.结束数字; i++) {
                    区间大小++;
                }
                double 单个元素出现概率 = interval.出现概率 / 区间大小;
                for(int i = interval.起始数字 + 1 ; i < interval.结束数字; i++) {
                    取数池.add(单个元素出现概率,i);
                }
            }
        }

        return 取数池;
    }

}
